TestInherit.cs
    using UnityEngine;
    using System.Collections;
    using LuaInterface;
    public class TestInherit : MonoBehaviour 
    {
        private string script =
        @"  LuaTransform = 
            {                          
            }                                                   
            function LuaTransform.Extend(u)         
                local t = {}                        
                local _position = u.position      
                tolua.setpeer(u, t)     
                t.__index = t
                local get = tolua.initget(t)
                local set = tolua.initset(t)   
                local _base = u.base            
                --重写同名属性获取        
                get.position = function(self)                              
                    return _position                
                end            
                --重写同名属性设置
                set.position = function(self, v)                                                                 
                    if _position ~= v then         
                        _position = v                    
                        _base.position = v                                                                                      
                    end
                end
                --重写同名函数
                function t:Translate(...)            
                    print('child Translate')
                    _base:Translate(...)                   
                end    
                return u
            end
            --既保证支持继承函数,又支持go.transform == transform 这样的比较
            function Test(node)        
                local v = Vector3.one           
                local transform = LuaTransform.Extend(node)  
                --local transform = node                                                  
                local t = os.clock()            
                for i = 1, 200000 do
                    transform.position = transform.position
                end
                print('LuaTransform get set cost', os.clock() - t)
                transform:Translate(1,1,1)                                                                     
                local child = transform:FindChild('child')
                print('child is: ', tostring(child))
                if child.parent == transform then            
                    print('LuaTransform compare to userdata transform is ok')
                end
                transform.xyz = 123
                transform.xyz = 456
                print('extern field xyz is: '.. transform.xyz)
            end
            ";
        LuaState lua = null;
        void Start () 
        {
            lua = new LuaState();        
            lua.Start();
            LuaBinder.Bind(lua);
            lua.DoString(script, "TestInherit.cs");
            float time = Time.realtimeSinceStartup;
            for (int i = 0; i < 200000; i++)
            {
                Vector3 v = transform.position;            
                transform.position = v;
            }
            time = Time.realtimeSinceStartup - time;
            Debugger.Log("c# Transform get set cost time: " + time);
            LuaFunction func = lua.GetFunction("Test");
            func.BeginPCall();
            func.Push(transform);
            func.PCall();
            func.EndPCall();
            lua.CheckTop();
            lua.Dispose();
            lua = null;
        }
    }
🔚